package com.parking.order.client.inter;

import com.parking.common.core.model.Result;
import com.parking.order.client.dto.CertifiedAccountDto;
import com.parking.order.client.dto.CertifiedInfoDto;
import com.parking.order.client.form.CertifiedScoreForm;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * Feign接口调用 物业模块
 * */
@FeignClient(name = "parking-certified", path = "/certified")
public interface CertifiedClient {
    /**
     * 根据ID查询物业账号
     * 参数: 物业账号Id certifiedAccountId
     * 返回: 物业账号Id certifiedAccountId
     *      物业账号 certifiedAccountAccount
     *      物业信息Id certifiedInfoId
     * 方法: 1.判断certifiedAccountId是否存在对应的物业账号 若不存在则抛异常
     *      2.判断对应的物业账号的状态是否是启用的 若不是则抛异常
     *      3.将物业账号放入Dto返回
     * */
    @GetMapping("/certifiedAccount/selectCertifiedAccountById")
    @ApiOperation("根据ID查询物业账号")
    Result<CertifiedAccountDto> selectCertifiedAccountById(@RequestParam("certifiedAccountId") Integer certifiedAccountId);
    /**
     * 根据ID查询物业信息
     * 参数: 物业信息Id   certifiedInfoId
     * 返回: 物业信息Id   certifiedInfoId
     *      物业名称     certifiedInfoName
     *      物业电话     certifiedInfoTel
     *      物业地址     certifiedInfoAddress
     *      普通车位单价  stallUnitPrice
     *      充电车位单价  chargeUnitPrice
     *      物业账号Id   certifiedAccountId
     * 方法: 1.判断certifiedInfoId是否存在对应的物业账号 若不存在则抛异常
     *      3.将物业账号放入Dto返回
     * */
    @GetMapping("/certifiedInfo/selectCertifiedInfoById")
    @ApiOperation("根据ID查询物业信息")
    Result<CertifiedInfoDto> selectCertifiedInfoById(@RequestParam("certifiedInfoId") Integer certifiedInfoId);

    /**
     * 查询所有状态正常的物业信息
     * 返回: 物业信息Id   certifiedInfoId
     *      物业名称     certifiedInfoName
     *      物业电话     certifiedInfoTel
     *      物业地址     certifiedInfoAddress
     *      普通车位单价  stallUnitPrice
     *      充电车位单价  chargeUnitPrice
     *      物业账号Id   certifiedAccountId
     * 方法: 1.查询所有状态正常的物业信息
     *      3.放入Dto返回
     * */
    @GetMapping("/certifiedInfo/selectAllCertifiedInfo")
    @ApiOperation("查询所有状态正常的物业信息")
    Result<List<CertifiedInfoDto>> selectAllCertifiedInfo();

    /**
     * 更新物业评分
     * 返回: List<CertifiedScoreDto> 物业评分Dto集合
     *      CertifiedScoreDto 物业评分Dto
     *          certifiedInfoId    物业信息Id
     *          certifiedInfoScore 物业评分
     * 方法: 给所有certifiedInfoId的物业信息赋分certifiedInfoScore
     *      1.查询certifiedInfoId对应的物业信息
     *      2.在Java层面修改物业评分certifiedInfoScore
     *      3.批量修改 (CertifiedInfoService业务层方法 saveOrUpdateBatch)
     * */
    @PutMapping("/certifiedInfo/certifiedScoring")
    @ApiOperation("更新物业评分")
    Result certifiedScoring(@RequestBody CertifiedScoreForm form);


}
